
// namespace lcc {

// const TAG = "lcc.AudioManager";

// /**
//  * 索引路径
//  */
// export namespace INDEXPATH {
// 	/**
// 	 * 音频
// 	 */
// 	export let AUDIO = "audio";
// };

// /**
//  * 音频配置
//  */
// interface AudioConfig {
// 	/**
// 	 * 剪辑
// 	 */
// 	clip:cc.AudioClip;
	
// 	/**
// 	 * 配置
// 	 */
// 	config:{
// 		/**
// 		 * 文件
// 		 */
// 		file:string;

// 		/**
// 		 * 音量
// 		 */
// 		volume:number;
		
// 		/**
// 		 * 循环
// 		 */
// 		loop:boolean;
// 	};

// 	/**
// 	 * 预加载
// 	 */
// 	preload?:boolean;
// }

// /**
//  * 默认全局BGM音量
//  */
// const C_BGM_VOLUME = 0.5;

// /**
//  * 默认全局SE音量
//  */
// const C_SE_VOLUME = 0.5;

// /** !#zh
// 音频管理器 */
// export class AudioManager extends cc.EventTarget implements AssetsLoader {
	
// 	/**
// 	 * 管理器实例
// 	 */
// 	private static _instance:AudioManager;

// 	/**
// 	 * 单例获取函数
// 	 */
// 	public static getInstance() : AudioManager  {
// 		if(!AudioManager._instance){
// 			AudioManager._instance = new AudioManager();
// 		}
// 		return AudioManager._instance;
// 	}
	
// 	/**
// 	 * 音频配置
// 	 */
// 	private _audioconfs:{[key:string]:AudioConfig} = {};
	
// 	/**
// 	 * 全局BGM音量
// 	 */
// 	private _bgmvolume:number = C_BGM_VOLUME;

// 	/**
// 	 * 全局SE音量
// 	 */
// 	private _sevolume:number = C_SE_VOLUME;

// 	/**
// 	 * 当前BGM
// 	 */
// 	private _nowbgm:string = null!;

// 	/**
// 	 * 当前BGM的ID
// 	 */
//     private _nowbgmID:number = null!;
    
// 	/**
// 	 * 构造数据库管理器
// 	 */
// 	constructor(){
// 		super();
// 		EventCenter.once(Events.INITIALIZE, ()=>{
// 			loadMgr.setAssetLoader(INDEXPATH.AUDIO, this);
// 			loadMgr.setModuleWeight(INDEXPATH.AUDIO, 2);
// 			indexMgr.on("indexes_removed", this.onIndexesRemoved, this);
// 		});
// 	}

// 	public releaseAssets(anames:string[]){
// 		this.releaseAudios(anames, true);
// 	}

// 	public async loadAssets(anames:string[], progress:(p:number)=>void){
// 		await this.preloadAudios(anames, progress);
// 	}

// 	onIndexesRemoved(){
// 		this.releaseInvalidAudios();
// 	}

// 	/**
// 	 * 释放无效音频
// 	 */
// 	public releaseInvalidAudios(){
// 		let afiles = indexMgr.getIndex(INDEXPATH.AUDIO) || {};
// 		for(let aname of Object.keys(this._audioconfs)){
// 			if(!afiles[aname]){
// 				this.releaseAudio(aname);
// 			}
// 		}
// 	}

// 	/**
// 	 * 获取所有音频
// 	 */
// 	public getAllAudios(){
// 		return Object.keys(indexMgr.getIndex(INDEXPATH.AUDIO));
// 	}

// 	/**
// 	 * 释放指定音频
// 	 * @param aname 
// 	 * @param preload 预加载的也释放
// 	 */
// 	public releaseAudio(aname:string, preload:boolean = false){
// 		let audioconf = this._audioconfs[aname];
// 		if(audioconf && (!audioconf.preload || preload)){
// 			delete this._audioconfs[aname];
// 			audioconf.clip.decRef();
// 			cc.audioEngine.uncache(audioconf.clip);
// 		}
// 	}

// 	/**
// 	 * 释放音频数组
// 	 * @param preload 
// 	 */
// 	public releaseAudios(anames:string[], preload:boolean = false){
// 		for(let aname of anames){
// 			this.releaseAudio(aname, preload);
// 		}
// 	}
	
// 	/**
// 	 * 预加载指定音频
// 	 * @param aname 
// 	 */
// 	public async preloadAudio(aname:string){
// 		(await this.getAudioConfig(aname)).preload = true;
// 	}
	
// 	/**
// 	 * 预加载音频数组
// 	 */
// 	public async preloadAudios(anames:string[], progress = (p:number)=>{}){
// 		for (let i = 0, len = anames.length; i < len; i++){
// 			await this.preloadAudio(anames[i]);
// 			progress((i + 1) / len);
// 		}
// 	}

// 	/**
// 	 * 设置 BGM 音量
// 	 */
// 	public async setBgmVolume(volume:number){
//         if(this._bgmvolume != volume){
//             this._bgmvolume = volume;
//             if(this._nowbgmID != null){
// 				let audio = await this.getAudioConfig(this._nowbgm);
// 				if(audio){
// 					cc.audioEngine.setVolume(this._nowbgmID, 
// 						volume * (audio.config.volume != null ? audio.config.volume : 1));
// 				}
//             }else if(this._nowbgm != null){
//                 this.playBGM(this._nowbgm);
//             }
//         }
// 	}

// 	/**
// 	 * 获得 BGM 音量
// 	 */
// 	public getBgmVolume(){
// 		return this._bgmvolume;
// 	}
	
// 	/**
// 	 * 设置 SE 音量
// 	 */
// 	public setSeVolume(volume:number){
// 		this._sevolume = volume;
// 	}
	
// 	/**
// 	 * 获得 SE 音量
// 	 */
// 	public getSeVolume(){
// 		return this._sevolume;
// 	}

// 	/**
// 	 * 获得当前的BGM
// 	 */
// 	public getNowBGM(){
// 		return this._nowbgm;
// 	}

// 	/**
// 	 * 播放背景音乐
// 	 * @param aname 音频名称
// 	 * @param loop 是否循环
// 	 */
// 	public async playBGM(aname:string, loop:boolean = true){
// 		if(this._nowbgm != aname){
// 			let aconf = await this.getAudioConfig(aname);
// 			if(aconf){
// 				this.stopBGM();
//                 this._nowbgm = aname;
// 				if(this._bgmvolume > 0){
// 					this._nowbgmID = cc.audioEngine.play(aconf.clip, 
// 						loop !== null ? loop : aconf.config.loop , 
// 						(aconf.config.volume != null ? aconf.config.volume : 1) * this._bgmvolume);
// 					return this._nowbgmID;
// 				}
// 			}
// 		}
// 	}

// 	/**
// 	 * 停止当前BGN
// 	 */
// 	public stopBGM(){
// 		if(this._nowbgmID != null){
// 			cc.audioEngine.stop(this._nowbgmID);
// 			this._nowbgmID = null;
// 			this._nowbgm = null;
// 		}
// 	}

// 	/**
// 	 * 播放音效
// 	 * @param aname 音频名称
// 	 */
// 	public async playSE(aname:string){
// 		let aconf = await this.getAudioConfig(aname);
// 		if(aconf && this._sevolume > 0){
// 			return cc.audioEngine.play(aconf.clip, 
// 				aconf.config.loop , 
// 				(aconf.config.volume != null ? aconf.config.volume : 1) * this._sevolume);
// 		}
// 	}

// 	/**
// 	 * 监听音频播放完成
// 	 * @param aid 音频播放ID
// 	 * @param callback 完成回调
// 	 */
// 	public listenFinish(aid:number, callback:Function){
// 		let state = cc.audioEngine.getState(aid);
// 		if(state == cc.audioEngine.AudioState.ERROR){
// 			callback();
// 		}else{
// 			cc.audioEngine.setFinishCallback(aid, callback);
// 		}
// 	}

// 	/**
// 	 * 获得音频配置
// 	 * @param aname 音频名称
// 	 */
// 	private async getAudioConfig(aname:string){
// 		let audioconf = this._audioconfs[aname];
// 		if(!audioconf){
// 			let config = indexMgr.getIndex(INDEXPATH.AUDIO + "/" + aname);
// 			if(config){
// 				let finfo = packMgr.parseFilePath(config.file);
// 				let clip = await Utils.loadAudio(finfo.rpath, finfo.bundle || cc.resources);
// 				audioconf = {
// 					clip : clip,
// 					config : config,
// 				};
// 				clip.addRef();
// 				this._audioconfs[aname] = audioconf;
// 			}
// 		}
// 		return audioconf;
// 	}
	
// };

// /**
//  * 音频管理器
//  */
// export const audioMgr = AudioManager.getInstance();

// }
